package com.example.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.domain.entity.Follow;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.exception.FloraException;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author zrr
 * @since 2022-12-02
 */
public interface IFollowService extends IService<Follow> {

    /**
     * 得到关注的对象列表
     *
     * @param followerId    追随者id
     * @param followingType 关注对象的类型
     * @param pageNum       页面num
     * @param pageSize      页面大小
     * @return {@link IPage}
     */
    IPage getFollowingList(long followerId, Integer followingType, Integer pageNum, Integer pageSize);

    /**
     * 获得植物的关注数
     *
     * @param plantId 植物id
     * @return {@link Long}
     */
    Long getFollowerNumOfPlant(long plantId);

    /**
     * 获得用户的关注数
     *
     * @param userId 用户id
     * @return {@link Long}
     */
    Long getFollowerNumOfUser(long userId);

    /**
     * 关注植物
     *
     * @param follow
     * @throws FloraException 植物异常
     */
    void addFollowerOfPlant(Follow follow)throws FloraException;

    /**
     * 关注用户
     *
     * @param follow
     * @throws FloraException 植物异常
     */
    void addFollowerOfUser(Follow follow)throws FloraException;

    /**
     * 取消对植物的关注
     *
     * @param follow
     */
    void deleteFollowerOfPlant(Follow follow);

    /**
     * 取消对用户的关注
     *
     * @param follow
     */
    void deleteFollowerOfUser(Follow follow);
}
